home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Topik
/
Topik - Disk 37 - Games 3 (19xx)(Topik Public Domain)(PD)[WB].zip
/
Topik - Disk 37 - Games 3 (19xx)(Topik Public Domain)(PD)[WB].adf
/
GRIBIT
/
Gribit.BAS.pp
/
Gribit.BAS
Wrap
BASIC Source File
|
1991-02-24
|
19KB
|
1,175 lines
REM $OPTION Y+,k150
'
' Gribit by Alan Mead
'
' Copyright © 1990 Amiga Computing
'
Gribit:
SCREEN 2,320,200,4,1
WINDOW 2,"GRIBIT, © 1990 Amiga Computing ",(0,0)-(311,185),16+128,2
DEFINT a-z
DEFLNG s,h
buffs = 198
buffc = 134
hiscore=0
life=3
FOR cl=1 TO 4
MENU cl,0,0,""
NEXT
i$ = ".info"
vol = 127
DIM temp%(66)
DIM anim%(14,66)
DIM y%(9)
DIM x%(17)
DIM array%(17,10)
DIM ctemp%(30)
DIM cur%(15,30)
DIM cy%(15)
DIM cx%(15)
d=0
FOR y=23 TO 143 STEP 8
cy%(d)=y
d=d+1
NEXT
d=0
FOR x=126 TO 246 STEP 8
cx%(d)=x
d=d+1
NEXT
FOR y=0 TO 9
y%(y)=(y*17)+17
NEXT
FOR x=0 TO 17
x%(x)=x*17
NEXT
GOSUB cols
GOSUB aload
ob=7
options:
REM $EVENT OFF
GOSUB nopoint
score = 0
scrn = 0
WINDOW CLOSE 3
WINDOW 2
FOR cl=1 TO 4
MENU cl,0,0,""
NEXT
op2:
CLS
n$="t1":GOSUB fetch
LOCATE 1,12
PRINT "OPTIONS"
LOCATE 6,7
PRINT "Press key"
LOCATE 8,7
PRINT "G to play Game"
LOCATE 10,7
PRINT "S to edit Screens"
LOCATE 12,7
PRINT "C to edit Characters"
LOCATE 14,7
PRINT "I for Instructions"
LOCATE 16,7
PRINT "Q to Quit"
kloop:
a$=INKEY$
a$=UCASE$(a$)
IF a$="G" THEN GOTO game
IF a$="S" THEN GOTO screened
IF a$="C" THEN GOTO spriteed
IF a$="I" THEN GOTO ins
IF a$="Q" THEN CLS:GOSUB apoint:MENU RESET:WINDOW CLOSE 2:END
GOTO kloop
ins:
CLS
n$="border":GOSUB fetch
LOCATE 1,10
PRINT "INSTRUCTIONS"
LOCATE 6,5
PRINT "Controls"
LOCATE 7,5
PRINT "Mouse 1 for Editors"
LOCATE 8,5
PRINT "Joy 2 for game"
LOCATE 10,5
PRINT "Collect all Mushrooms"
LOCATE 11,5
PRINT "to complete screens "
LOCATE 13,5
PRINT "Fire to blow bubbles"
LOCATE 15,5
PRINT "Keys open doors"
LOCATE 18,5
PRINT "Spacebar to continue"
wm:
a$ = INKEY$
IF a$ <>" " THEN GOTO wm
GOTO op2
screened:
REM $EVENT ON
GOSUB apoint
IF ob >7 THEN ob =7
GOSUB wipe
MENU 1,0,1,"Project "
MENU 1,1,1,"Clear Screen"
MENU 1,2,1,"Options "
MENU 2,0,1," Load "
mn = 2:GOSUB menset
MENU 3,0,1," Save "
mn = 3:GOSUB menset
ON MENU GOSUB choice
MENU ON
x=0:y=0:x1=0:y1=0:f=10:frog=0
dslop:
m=MOUSE(0)
IF m<>0 THEN GOTO dslop
move:
a$ = INKEY$
w=MOUSE(0)
x=INT(MOUSE(1)/17)
y=INT(MOUSE(2)/17)-1
IF y < 0 THEN y=0:GOSUB supdate
IF x < 0 THEN x = 0
IF x > 17 THEN x = 17
IF y > 9 THEN y = 9
IF (w <> 0) OR (a$=" ") THEN
IF y=0 THEN GOTO move
IF x=0 THEN GOTO move
IF y=9 THEN GOTO move
IF x=17 THEN GOTO move
IF x%(x)=frogx THEN
IF y%(y)=frogy THEN frog=0
END IF
IF ob = 8 THEN
IF frog = 1 THEN GOSUB warn
IF frog = 0 THEN
fob=array%(x,y)
PUT (x%(x),y%(y)),anim%(ob,0),PSET:frog =1
frogx =x%(x):frogy =y%(y)
array%(x,y)=ob
END IF
END IF
IF ob <> 8 THEN
array%(x,y)=ob
PUT (x%(x),y%(y)),anim%(ob,0),PSET
END IF
END IF
GOTO move
supdate:
w = MOUSE(0)
IF (w <>0) OR (a$ = " ") THEN
obx=INT(MOUSE(1)/20)
IF obx <0 THEN RETURN
IF obx >8 THEN RETURN
ob=obx
END IF
PUT (x%(17),y%(0)-17),anim%(ob,0),PSET
RETURN
warn:
WINDOW 3,"Warning",(0,0)-(311,24),8+128,2
LOCATE 2,1
PRINT "One Frog completes each screen."
winch:
win=WINDOW(7)
IF win <>0 then GOTO winch
WINDOW OUTPUT 2
RETURN
menset:
s$="Screen "
FOR men = 1 TO 18
sn$=CHR$(64+men)
sc$=s$+sn$
MENU mn,men,1,sc$
NEXT
RETURN
choice:
id=MENU(0)
IF id = 2 THEN GOTO m2
IF id = 3 THEN GOTO m3
IF MENU(1)=1 THEN GOSUB wipe:RETURN
IF MENU(1)=2 THEN MENU STOP:GOTO options
m2:
scc=(MENU(1)+9)
x$=STR$(scc)
n$=RIGHT$(x$,2)
GOSUB fetch
LOCATE 1,21
PRINT "Screen ";CHR$(scc+55);
RETURN
m3:
scc=(MENU(1)+9)
x$=STR$(scc)
n$=RIGHT$(x$,2)
GOSUB store
LOCATE 1,21
PRINT "Screen ";CHR$(scc+55);
RETURN
wipe:
frog=0
CLS
n$="border"
GOSUB fetch
LOCATE 1,21
PRINT "Screen ";
pob:
FOR pz = 0 TO 8
PUT (x%(pz)+(pz*3),y%(0)-17),anim%(pz,0),PSET
NEXT
PUT (x%(17),y%(0)-17),anim%(ob,0),PSET
RETURN
store:
IF frog=0 THEN
GOSUB warn
RETURN
END IF
GOSUB black
OPEN n$ FOR OUTPUT AS 1 LEN=buffs
FOR dx=0 TO 17
FOR dy=0 TO 9
d=array%(dx,dy)
PRINT #1,MKI$ (d);
NEXT
NEXT
CLOSE 1
d$ = n$+i$
KILL d$
GOSUB cols
RETURN
fetch:
GOSUB black
dime = 0
OPEN n$ FOR INPUT AS 1 LEN=buffs
FOR dx=0 TO 17
FOR dy=0 TO 9
array%(dx,dy)=CVI(INPUT$(2,1))
IF array%(dx,dy)=8 THEN
frogx=x%(dx)
frogy=y%(dy)
x=dx
y=dy
frog=1
END IF
IF array%(dx,dy)=2 THEN dime = dime +1
NEXT
NEXT
CLOSE 1
GOSUB refresh
GOSUB cols
RETURN
refresh:
FOR dx=1 TO 16
d=array%(dx,0)
PUT (x%(dx),y%(0)),anim%(d,0),PSET
NEXT
FOR dy=0 TO 9 STEP 1
d=array%(17,dy)
PUT (x%(17),y%(dy)),anim%(d,0),PSET
NEXT
FOR dx=16 TO 1 STEP -1
d=array%(dx,0)
PUT (x%(dx),y%(9)),anim%(d,0),PSET
NEXT
FOR dy=9 TO 0 STEP -1
d=array%(0,dy)
PUT (x%(0),y%(dy)),anim%(d,0),PSET
NEXT
dy=8
rloop:
FOR dx=1 TO 16
d=array%(dx,dy)
PUT (x%(dx),y%(dy)),anim%(d,0),PSET
NEXT
dy=dy-1
FOR dx=16 TO 1 STEP -1
d=array%(dx,dy)
PUT (x%(dx),y%(dy)),anim%(d,0),PSET
NEXT
dy=dy-1
IF dy = 0 THEN RETURN
GOTO rloop
ok:
FOR d= 1 TO 10
SOUND d*50,1,vol,1
for del = 1 to 1000:NEXT
NEXT
RETURN
aload:
LOCATE 2,2
PRINT "Loading Sprites"
s1$="sp"
FOR i = 1 to 14
si$=STR$(i)
ls=LEN(si$)-1
s2$=RIGHT$(si$,ls)
n$=s1$+s2$
n=i-1
GOSUB nload
NEXT
LOCATE 2,2
PRINT " "
RETURN
nload:
OPEN n$ FOR INPUT AS 1 LEN=buffc
FOR d=0 TO 66
anim%(n,d)=CVI(INPUT$(2,1))
NEXT d
CLOSE 1
RETURN
black:
FOR col = 2 TO 15
PALETTE col,0,0,0
NEXT
RETURN
cols:
PALETTE 0,0,0,0 :REM black
PALETTE 1,1,.5,0 :REM brown
PALETTE 2,0,1,0 :REM green
PALETTE 3,1,.73,0 :REM yellow
PALETTE 4,1,1,.13 :REM yellow
PALETTE 5,1,.13,.93 :REM violet
PALETTE 6,.8,0,.9 :REM purple
PALETTE 7,.25,.25,1 :REM blue
PALETTE 8,.2,.2,.75 :REM blue
PALETTE 9,.15,.15,.5 :REM blue
PALETTE 10,1,0,0 :REM red
PALETTE 11,.6,0,0 :REM red
PALETTE 12,.4,0,0 :REM red
PALETTE 13,.4,.4,.4 :REM white
PALETTE 14,.6,.6,.6 :REM white
PALETTE 15,1,1,1 :REM white
GOSUB ok
RETURN
spriteed:
REM $EVENT ON
GOSUB apoint
GOSUB black
c=7:e=1:s=0:del=500:sy=0:sx=0:y1=95:x1=18
sh0=0:mx=126:mxt=mx:fl=1
GOSUB curser
CLS
GOSUB grid
c=1:i=2
FOR y=31 TO 135 STEP 8
PUT (270,y),cur%(i,0),PSET
i=i+1
NEXT y
i=6
PUT (270,151),cur%(i,0),PSET
x=126:y=23:yn=115:xn=18:sh0=4
MENU 1,0,1,"Project "
MENU 1,1,1,"Restore "
MENU 1,2,1,"Save All"
MENU 1,3,1,"Options"
MENU 2,0,1,"Change"
MENU 2,1,1,"Fill "
MENU 2,2,1,"Erase "
MENU 2,3,1,"X Flip"
MENU 2,4,1,"Y Flip"
MENU 2,5,1,"Rotate"
MENU 3,0,1,"Scroll"
MENU 3,1,1,"Up "
MENU 3,2,1,"Down "
MENU 3,3,1,"Left "
MENU 3,4,1,"Right "
MENU 4,0,1,"Copy"
MENU 4,1,1,"Copy To"
ON MENU GOSUB cselect
MENU ON
GOSUB place
GOSUB cols
ob = 0
nob = ob:cb = 1:GOSUB obox
GOSUB update
mslop:
m=MOUSE(0)
IF m<>0 THEN GOTO mslop
cmove:
a$=INKEY$
m=MOUSE(0)
xm=MOUSE(1)-7
ym=MOUSE(2)-7
IF (ym+7) > y%(9) THEN GOSUB gupdate
IF xm>260 THEN GOSUB colour
L=0
IF xm<121 THEN xm=121:L=1
IF xm>247 THEN xm=247:L=1
IF ym<16 THEN ym=16:L=1
IF ym>143 THEN ym=143:L=1
IF L=1 THEN GOTO cmove
xd=INT(xm/8)
yd=INT(ym/8)
x=cx%(xd-15)
y=cy%(yd-2)
px=(x%(ob)+(xd+4)+(ob*3)-16):py=(y%(9)+(yd-2))
IF (m <> 0) OR (a$=" ") THEN GOSUB set
GOTO cmove
set:
PSET (px,py),i
PSET (50+xd,50+yd),i
PUT (x,y),cur%(i,0),PSET
RETURN
colour:
IF MOUSE(1)>279 THEN RETURN
IF ( m <> 0 ) OR ( a$ = " " ) THEN i=POINT(MOUSE(1)-2,MOUSE(2))
IF i<0 THEN RETURN
IF i>15 THEN RETURN
PUT (270,151),cur%(i,0),PSET
RETURN
gupdate:
olob = ob
IF ( m = 1 ) OR ( a$ = " " ) THEN
ob = INT(MOUSE(1)/20)
IF ob <0 THEN ob = olob:RETURN
IF ob >13 THEN ob = olob:RETURN
nob = olob:cb = 0:GOSUB obox
nob = ob:cb = 1:GOSUB obox
GOSUB update
END IF
RETURN
ccopy:
GOSUB tpoint
copl:
a$=INKEY$
mc=MOUSE(0)
cxm=MOUSE(1)-7
cym=MOUSE(2)-7
IF ( mc = 1 ) OR ( a$ = " " ) THEN GOTO copy
GOTO ccopy
copy:
olob = ob
IF (cym+7) > y%(9) THEN
ob = INT(MOUSE(1)/20)
IF ob <0 THEN ob = olob:GOTO apoint
IF ob >13 THEN ob = olob:GOTO apoint
GOSUB downdate
END IF
GOTO apoint
downdate:
nob = olob:cb = 0:GOSUB obox
nob = ob:cb = 1:GOSUB obox
GET (65,52)-(80,67),anim%(ob,0)
PUT (x%(ob)+(ob*3)+3,y%(9)),anim%(ob,0),PSET
GOSUB ok
RETURN
obox:
tx = x%(nob)+(nob*3)+1
ty = y%(9)-2
bx = tx + 19
by = ty + 19
LINE (tx,ty)-(bx,by),cb,b
RETURN
lay:
FOR n=0 TO 13
GET (x%(n)+(n*3)+3,y%(9))-(x%(n)+(n*3)+18,y%(9)+15),anim%(n,0)
NEXT
RETURN
place:
FOR pz = 0 TO 13
PUT (x%(pz)+(pz*3)+3,y%(9)),anim%(pz,0),PSET
NEXT
RETURN
cselect:
me=MENU(0)
IF me=2 THEN GOTO two
IF me=3 THEN GOTO three
IF me=4 THEN GOTO four
IF MENU(1)=1 THEN GOTO creset
IF MENU(1)=2 THEN GOTO csave
IF MENU(1)=3 THEN GOSUB lay:GOTO options
IF MENU(1)=4 THEN CLS:MENU RESET:END
two:
IF MENU(1)=1 THEN GOTO fill
IF MENU(1)=2 THEN GOTO empty
IF MENU(1)=3 THEN s=2:GOTO crefresh:REM xflip
IF MENU(1)=4 THEN s=3:GOTO crefresh:REM yflip
IF MENU(1)=5 THEN s=4:GOTO crefresh:REM rotate
three:
IF MENU(1)=1 THEN s=1:sy=+1:GOTO crefresh:REM scroll up
IF MENU(1)=2 THEN s=1:sy=-1:GOTO crefresh:REM scroll down
IF MENU(1)=3 THEN s=1:sx=+1:GOTO crefresh:REM scroll left
IF MENU(1)=4 THEN s=1:sx=-1:GOTO crefresh:REM scroll right
four:
IF MENU(1)=1 THEN GOTO ccopy
update:
GET (x%(ob)+(ob*3)+3,y%(9))-(x%(ob)+(ob*3)+18,y%(9)+15),temp%
PUT (65,52),temp%,PSET
s=1
GOSUB crefresh
RETURN
swop:
GET (65,52)-(80,67),temp%
PUT (x%(ob)+(ob*3)+3,y%(9)),temp%,PSET
RETURN
fill:
FOR y=23 TO 143 STEP 8
FOR x=126 TO 246 STEP 8
px=(50+INT(x/8)):py=(50+INT(y/8))
PSET (px,py),i
PUT (x,y),cur%(i,0),PSET
NEXT x,y
GOSUB swop
GOSUB ok
RETURN
empty:
FOR y=23 TO 143 STEP 8
FOR x=126 TO 246 STEP 8
px=(50+INT(x/8)):py=(50+INT(y/8))
PSET (px,py),0
PUT (x,y),cur%(0,0),PSET
NEXT
NEXT
GOSUB swop
GOSUB ok
RETURN
grid:
FOR x=0 TO 128 STEP 8
LINE(125,22+x)-(253,22+x),e
LINE(125+x,22)-(125+x,150),e
NEXT
RETURN
curser:
FOR ci=0 TO 15
LINE (0,0)-(6,6),ci,bf
GET (0,0)-(6,6),cur% (ci,0)
NEXT
RETURN
csave:
s1$="sp"
FOR i = 1 TO 14
si$=STR$(i)
ls=LEN(si$)-1
s2$=RIGHT$(si$,ls)
n$=s1$+s2$
n=i-1
GOSUB cstore
NEXT
LOCATE 2,2
PRINT " "
GOSUB ok
RETURN
cstore:
GET (x%(n)+(n*3)+3,y%(9))-(x%(n)+(n*3)+18,y%(9)+15),temp%
LOCATE 2,2
PRINT "Saving Sprite";n;
OPEN n$ FOR OUTPUT AS 1 LEN=buffc
FOR d=0 TO 66
PRINT #1,MKI$(temp%(d));
NEXT
CLOSE 1
d$ = n$+i$
KILL d$
RETURN
crefresh:
it=i
FOR y=23 TO 143 STEP 8
FOR x=126 TO 246 STEP 8
px=(50+INT(x/8)):py=(50+INT(y/8))
i=POINT (px+sx,py+sy)
IF s=1 THEN PUT (x,y),cur%(i,0),PSET
IF s=2 THEN PUT (372-x,y),cur%(i,0),PSET
IF s=3 THEN PUT (x,166-y),cur%(i,0),PSET
IF s=4 THEN PUT (103+y,269-x),cur%(i,0),PSET
NEXT
NEXT
GET (x,y)-(x+6,y+6),ctemp%
z=x:q=y
IF s >1 THEN GOSUB drawsprite
IF sx <> 0 THEN GOSUB drawsprite
IF sy <> 0 THEN GOSUB drawsprite
sx=0:sy=0
i=it
GOSUB ok
RETURN
drawsprite:
FOR y=23 TO 143 STEP 8
FOR x=126 TO 246 STEP 8
i=POINT (x,y)
px=(50+INT(x/8)):py=(50+INT(y/8))
PSET(px,py),i
NEXT
NEXT
GOSUB swop
RETURN
creset:
GOSUB aload
FOR pz = 0 TO 13
PUT (x%(pz)+(pz*3)+3,y%(9)),anim%(pz,0),PSET
NEXT
PUT (65,52),anim%(ob,0),PSET
GOSUB update
RETURN
game:
gf=12
scrn=0:life = 3:kgot = 2:kp = 13:ip = 4:e = 90
score = -10
PUT (0,0),anim%(9,0),PSET
PUT (0,0),anim%(3,0),OR
GET (0,0)-(15,15),anim%(14,0)
game2:
CLS
gst =0
gd=0
scrn = scrn +1
score = score + scrn * 10
IF scrn >18 THEN scrn =1
scno = scrn+9
IF score >10 THEN
LOCATE 1,5
PRINT "Screen ";CHR$(scrn + 64);" Score";score;
END IF
scc=scno
x$=STR$(scc)
n$=RIGHT$(x$,2)
dime = 0
OPEN n$ FOR INPUT AS 1 LEN=buffs
FOR dx=0 TO 17
FOR dy=0 TO 9
array%(dx,dy)=CVI(INPUT$(2,1))
IF array%(dx,dy)=8 THEN
frogx=x%(dx)
frogy=y%(dy)
x=dx
y=dy
frog=1
END IF
IF array%(dx,dy)=2 THEN dime = dime +1
NEXT
NEXT
CLOSE 1
IF score >10 THEN
WINDOW CLOSE 3
WINDOW 2
END IF
GOSUB refresh
f=10:x1=x:y1=y:xg1=x:yg1=y:xg=x:yg=y:gst=0
gdl=10:gc=0:ibx=8:bori=0
LOCATE 1,2
PRINT " "
GOSUB trow
GOSUB lives
GOSUB ice
GOSUB keys
GOSUB energy
GOSUB ok
gmove:
a$=INKEY$
a$ = UCASE$(a$)
w=STRIG(3)
x=x+STICK(2)
y=y+STICK(3)
IF x < 0 THEN x = 0
IF x > 17 THEN x = 17
IF y < 0 THEN y = 0
IF y > 9 THEN y = 9
zob=array%(x,y)
IF zob =9 THEN GOSUB iceg
IF zob =7 THEN x=x1:y=y1:cq=0
IF zob =20 THEN e = e-10:GOSUB energy
IF zob =4 THEN
SOUND 164.81,1,vol,0
IF kgot =0 THEN
FOR d = 1 TO 10000:NEXT
x=x1:y=y1
GOTO gm2
END IF
kgot = kgot-1
IF kgot <0 THEN kgot =0
PUT (x%(kp+kgot+1),0),anim%(0,0),PSET
END IF
gm2:
IF a$= "P" THEN GOSUB pause
IF a$ = CHR$(27) THEN GOTO options
IF a$ = "~" THEN GOTO game2
IF zob = 1 THEN GOSUB plus
IF zob = 2 THEN
dime=dime-1
SOUND 523.25,1,vol,0
FOR d = 1 TO 1000:next
score = score +10
END IF
IF dime <1 THEN goto game2
IF zob = 5 THEN GOSUB plus
IF zob = 6 THEN
SOUND 1760,1,40,0
SOUND 880,1,40,1
FOR d = 1 TO 1000:NEXT
END IF
IF zob = 20 THEN GOSUB plus
ct=ct+1
IF ct >3 THEN
ct=0
IF f=10 THEN f=11:GOTO ctj
IF f=11 THEN f=10
END IF
ctj:
IF zob = 14 THEN
SOUND 1000,1,vol,0
kgot = kgot +1
IF kgot >4 THEN kgot = 4
PUT (x%(kp+kgot),0),anim%(3,0),PSET
END IF
cq=0
IF x<>x1 THEN cq=cq+1
IF y<>y1 THEN cq=cq+1
IF cq >0 THEN
IF w = -1 THEN GOSUB icel
PUT (x%(x),y%(y)),anim%(f,0),PSET:' * put frog
array%(x,y)=15
blc = array%(x1,y1)
IF (blc=15) OR (blc=8) OR (blc=9) then
PUT (x%(x1),y%(y1)),anim%(bori,0),PSET:' * put blank
array%(x1,y1)=bori
END IF
bori = 0
END IF
IF cq = 0 THEN
PUT (x%(x),y%(y)),anim%(f,0),PSET:' * put frog
array%(x,y)=15
END IF
IF dime <1 THEN goto game2
IF gst =1 THEN
GOSUB gho
IF x=xg THEN
IF y=yg THEN GOSUB minus
END IF
END IF
IF life <0 THEN GOTO Over
x1=x:y1=y
gx=INT(RND*17)
gy=INT(RND*9)
pu%=array%(gx,gy)
IF pu% = 0 THEN GOSUB sob
FOR acx = 1 TO 16
FOR acy = 1 TO 8
fall = array%(acx,acy)
IF (fall=1) OR (fall=2) OR (fall=5) OR (fall=14) THEN
fto = array%(acx,acy+1)
IF fto = 0 THEN
array%(acx,acy)=0
array%(acx,acy+1)=fall
PUT (x%(acx),y%(acy+1)),anim%(fall,0),PSET
PUT (x%(acx),y%(acy)),anim%(0,0),PSET
hb=array%(acx,acy+2)
IF hb=15 THEN GOSUB bonce
GOTO gcc
END IF
ftl = array%(acx-1,acy+1)
flc = array%(acx-1,acy)
IF (ftl = 0) AND (flc = 0) THEN
array%(acx,acy)=0
array%(acx-1,acy+1)=fall
PUT (x%(acx-1),y%(acy+1)),anim%(fall,0),PSET
PUT (x%(acx),y%(acy)),anim%(0,0),PSET
hb=array%(acx-1,acy+2)
IF hb=15 THEN GOSUB bonce
GOTO gcc
END IF
ftr = array%(acx+1,acy+1)
frc = array%(acx+1,acy)
IF (ftr = 0) AND (frc = 0) THEN
array%(acx,acy)=0
array%(acx+1,acy+1)=fall
PUT (x%(acx+1),y%(acy+1)),anim%(fall,0),PSET
PUT (x%(acx),y%(acy)),anim%(0,0),PSET
hb=array%(acx+1,acy+2)
IF hb=15 THEN GOSUB bonce
GOTO gcc
END IF
END IF
gcc:
NEXT
NEXT
GOTO gmove
gho:
gc = gc +1
IF gc = 3 THEN
IF y < yg THEN gd=3
IF y > yg THEN gd=1
END IF
IF gc = 6 THEN
IF x < xg THEN gd=2
IF x > xg THEN gd=0
gc=0
END IF
IF gd =0 THEN xg=xg +1
IF gd =1 THEN yg=yg +1
IF gd =2 THEN xg=xg -1
IF gd =3 THEN yg=yg -1
gob=array%(xg,yg)
IF (gob =9) OR ((gob=15) AND (w=-1) AND (ibx>0)) THEN
gst =0
PUT (x%(xg),y%(yg)),anim%(14,0),PSET
array%(xg,yg)=14
gbc =array%(xg1,yg1)
if (gbc=16) then
PUT (x%(xg1),y%(yg1)),anim%(0,0),PSET
array%(xg1,yg1)=0
END IF
xg1=xg:yg1=yg
FOR s = 1 TO 5
SOUND s*100,1,255,0
NEXT
RETURN
END IF
IF (gob =4) OR (gob =7) OR (gob =6) THEN
xg=xg1:yg=yg1
gd=INT(RND*4)
END IF
gdl=gdl-1
IF gdl =0 THEN
gd=INT(RND*4)
gdl=INT(RND*7)+10
END IF
cz=0
IF xg<>xg1 THEN cz=cz+1
IF yg<>yg1 THEN cz=cz+1
PUT (x%(xg),y%(yg)),anim%(f+2,0),PSET
array%(xg,yg)=16
IF cz >0 THEN
if array%(xg1,yg1)=16 then
PUT (x%(xg1),y%(yg1)),anim%(0,0),PSET
array%(xg1,yg1)=0
end if
END IF
IF gob =2 THEN dime =dime -1
xg1=xg:yg1=yg
RETURN
sob:
IF (gx = x1) AND (gy = y1) THEN RETURN
IF (gx = xg1) AND (gy = yg1) THEN RETURN
IF gst =0 THEN
sn = sn +1
IF sn <10 THEN GOTO sob2
sn = 0
xg=gx:yg=gy:xg1=xg:yg1=yg
gst = 1
RETURN
END IF
sob2:
s%=INT(RND*5)+1
IF (s% =4) OR (s% =2) OR (s% =3) THEN RETURN
sound 600,1,vol,0
array%(gx,gy)=s%
PUT (x%(gx),y%(gy)),anim%(s%,0),PSET
RETURN
minus:
kgot = kgot-1
IF kgot <0 THEN kgot =0
PUT (x%(kp+kgot+1),0),anim%(0,0),PSET
e=e+8
SOUND 131,1,255,0
SOUND 147,1,255,1
GOSUB energy
RETURN
bonce:
IF cq <> 0 THEN RETURN
GOSUB effectl
e=186
GOSUB energy
RETURN
plus:
score = score + 10
e=e-4
SOUND 392,1,vol,0
GOSUB energy
RETURN
trow:
FOR bl = 0 TO 17
PUT (x%(bl),0),anim%(0,0),PSET
NEXT
RETURN
lives:
FOR li = 0 TO 3
PUT (x%(li),0),anim%(0,0),PSET
NEXT
IF life<1 THEN RETURN
FOR li = 0 TO life-1
PUT (x%(li),0),anim%(8,0),PSET
NEXT
RETURN
ice:
FOR ki = 4 TO 4+ibx
PUT (x%(ki),0),anim%(9,0),PSET
NEXT
RETURN
keys:
IF kgot <1 THEN RETURN
kn = kp+1
FOR ky = kn TO kn+kgot-1
PUT (x%(ky),0),anim%(3,0),PSET
NEXT
RETURN
iceg:
ibx = ibx +1
IF ibx >8 THEN ibx =8 :RETURN
FOR ic = ip TO ip+ibx-1
PUT (x%(ic),0),anim%(9,0),PSET
NEXT
SOUND 220,1,vol,0
FOR d = 1 TO 1000:NEXT
array%(x,y)=0
RETURN
icel:
ibx = ibx -1
IF ibx <0 THEN ibx =0 :RETURN
FOR ic = ip+ibx TO ip+ibx+1
PUT (x%(ic),0),anim%(0,0),PSET
NEXT
SOUND 440,1,vol,0
FOR d = 1 TO 1000:NEXT
bori=9
RETURN
energy:
IF e < 0 THEN
IF life =3 THEN
score = score + 10
e=0
END IF
IF life <3 THEN
GOSUB effectg
life = life +1
GOSUB lives
e = 90
END IF
END IF
IF e > 185 THEN
GOSUB effectl
life = life -1
GOSUB lives
e = 90
END IF
LINE (307,0)-(314,e),0,bf
LINE (307,185)-(314,e),2,bf
RETURN
effectg:
for d = 1 to 10
SOUND 200*d,1,255,0
PALETTE 2,RND,RND,RND
gosub holdit
next
PALETTE 2,0,1,0 :REM green
RETURN
effectl:
FOR d = 1 TO 10
SOUND 2000/d,1,255,0
PALETTE 2,RND,RND,RND
GOSUB holdit
NEXT
PALETTE 2,0,1,0 :REM green
RETURN
holdit:
FOR i = 1 TO 2000
NEXT
RETURN
Over:
CLS
GOSUB ok
IF score > hiscore THEN hiscore = score
n$="t1":GOSUB fetch
LOCATE 7,9
PRINT "GAME OVER"
LOCATE 9,9
PRINT "Screen ";CHR$(scrn + 64)
LOCATE 11,9
PRINT "Score";score
LOCATE 13,9
PRINT "Hi Score";hiscore
LOCATE 15,9
PRINT "Press a Key"
GOSUB ok
oloop:
a$=INKEY$
IF a$ = "" THEN GOTO oloop
GOTO options
pause:
FOR del = 1 TO 100:PALETTE 1,.7,RND,0:NEXT
a$=INKEY$
PALETTE 1,.7,RND,0
w=STRIG(3)
IF w <0 THEN GOTO x
IF a$ = "" THEN GOTO pause
x:
PALETTE 1,1,.5,0 :REM brown
RETURN
nopoint:
FOR pc = 20212 TO 20275
POKE pc,0
NEXT
RETURN
apoint:
RESTORE frog
FOR pc = 0 TO 63
READ da
POKE 20212+pc,da
NEXT
RETURN
frog:
DATA 0,0,60,60,60,60,66,66,78,78
DATA 185,185,78,78,189,189,126,126,189,189
DATA 126,126,153,153,61,188,66,66,3,192
DATA 60,60,15,240,16,8,29,184,34,68
DATA 23,232,40,20,24,24,39,228,44,52
DATA 83,202,119,238,136,17,115,206,140,49
DATA 0,0,255,255
tpoint:
RESTORE tofrog
FOR pc = 0 TO 31
READ da
POKE 20244+pc,da
NEXT
RETURN
tofrog:
DATA 0,0,255,255,127,254,255,255
DATA 64,134,255,255,115,50,255,255,115,50
DATA 255,255,115,134,255,255,127,254,255,255
DATA 0,0,255,255
END